7.1 基于距离测量的定位
基于距离测量是一种基本的定位方法,其原理也非常直观和符合直觉。一种最基本的基于距离测量的定位方法是三边定位。
三边定位的基本思想是:假设空间中存在三个用于定位的信标。对于待测的定位点,可以测量该定位点到三个信标的距离。从信标处考虑,所有到信标指定距离的点,组成了一个以信标为圆心、半径为制定距离的圆。那么,根据定位点到三个信标的距离,即可分别确定三个定位圆。而这三个定位圆的交点,即为对待定位点的定位结果。
如图所示,如果三个信标的坐标分别为(0, 0)、(2, 0)和(1, 1.732)。对于定位点,如果定位点到三个信标的距离均为1.155,则以三个信标为圆心分别做圆,三个圆交于一点。则该点即为对定位点的定位结果。
假设待求的定位点坐标为(x, y),n个信标中第i个信标的坐标为(x_i,y_i),定位点到第i个信标的距离为d_i,则根据图1,有如下方程成立:
求解上式,即可求得定位点的坐标(x, y)。
但是通常来说,信标的定位圆并不会刚好交于一点。实际的测量结果通常如图所示。因此,在计算时,我们需要对其进行近似求解。常见方法有加权法、最小二乘法、质心法等。如果我们使用最小二乘法进行计算,需要在前面理论的基础上进一步进行计算。在式1的基础上,我们将前n-1个方程减去第n个方程,得到线性化方程:$AX=b$。其中:
则,利用最小二乘法可以解得:
相关代码如下(./code/trilateration.m)
nodeNumber = 3; %定位信标的数量
nodeList = [0, 0; 2, 0; 1, 1.732]; %三个定位信标的坐标
disList = [1.155, 1.155, 1.155]; %定位目标点到三个定位信标的距离
A = [];
B = [];
xn = nodeList(nodeNumber, 1);
yn = nodeList(nodeNumber, 2);
dn = disList(nodeNumber);
for i=1:nodeNumber-1
xi = nodeList(i, 1);
yi = nodeList(i, 2);
di = disList(i);
A = [A; 2 * (xi - xn), 2 * (yi - yn)];
B = [B; xi * xi + yi *yi - xn * xn - yn * yn + dn * dn - di * di];
end %#计算线性方程组的参数A和B
X = inv(A'*A)*A'*B %#根据最小二乘法公式计算结果X
代码中,nodeList表示信标的位置坐标,nodeNumber表示信标的数量,disList表示定位点到各信标的距离。则分别求得A和B以后,根据式2即可求得定位点的坐标X。
(延伸阅读:https://github.com/megagao/IndoorPos)
Some三边定位方法。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。
文章标题:7.1 基于距离测量的定位
文章字数:785
本文作者:WiSys Lab
发布时间:2019-07-02, 15:41:32
最后更新:2019-07-15, 16:47:13
原始链接:http://yoursite.com/2019/07/02/7.1 基于距离测量的定位/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。